# 使用完整的 Node.js 镜像，确保使用和您本地开发环境相同的 Node.js 主版本
FROM node:22-slim AS base

# 安装必要的系统依赖
RUN apt-get update && apt-get install -y \
    sqlite3 \
    wget \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# 依赖安装阶段
FROM base AS deps

# 复制依赖文件
COPY package*.json ./

# 清理 npm 缓存并安装依赖
RUN npm ci --only=production --omit=dev

# 构建阶段
FROM base AS builder

WORKDIR /app

# 复制依赖文件并安装所有依赖
COPY package*.json ./ && npm ci

# 复制源代码和Prisma配置，生成Prisma客户端并构建应用
COPY . . && npx prisma generate && npm run build

# 生产环境
FROM node:22-slim AS runner

WORKDIR /app

# 安装运行时需要的系统依赖
RUN apt-get update && apt-get install -y \
    sqlite3 \
    wget \
    && rm -rf /var/lib/apt/lists/*

# 创建非 root 用户
RUN groupadd --system --gid 1002 nodejs && \
    useradd --system --uid 1002 --gid nodejs nextjs

# 设置正确的权限和目录结构
RUN mkdir .next && chown nextjs:nodejs .next

# 复制生产依赖的 package.json 并安装
COPY package*.json ./ && \
    npm ci --only=production && \
    npm cache clean --force

# 复制Prisma配置
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/lib/generated ./lib/generated

# 复制构建产物
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

# 复制公共文件（如果存在）
RUN mkdir -p ./public
COPY --from=builder /app/public ./public

# 创建数据库目录并设置权限
RUN mkdir -p ./database && \
    chown -R 1002:1002 ./database && \
    chmod -R 755 ./database && \
    touch ./database/agi-todo.db && \
    chown 1002:1002 ./database/agi-todo.db && \
    chmod 644 ./database/agi-todo.db

# 复制启动脚本并设置权限
COPY docker/start.sh /app/start.sh && \
    chmod +x /app/start.sh && \
    chown nextjs:nodejs /app/start.sh

USER nextjs

# 确保数据库目录权限正确
RUN mkdir -p /app/database && \
    chown -R nextjs:nodejs /app/database && \
    chmod -R 755 /app/database

# 暴露端口
EXPOSE 3011

# 设置环境变量
ENV PORT=3011
ENV HOSTNAME="0.0.0.0"

# 启动应用
CMD ["/app/start.sh"]